package com.java.generic.special_reminder;

import java.util.ArrayList;

/**
 * 泛型为什么不考虑继承关系？
 */
public class NoExtends {
    public static void main(String[] args) {
        // 父转子：假设未发生编译错误，那么利用list.get(0)取到的全是String对象，但集合内实际存放的是Object则报错ClassCastException，且泛型的出现解决手动强转，不能违背泛型的初衷
        ArrayList<Object> list1 = new ArrayList<Object>();
        list1.add(new Object());
        list1.add(new Object());
        // ArrayList<String> list2 = list1; //编译错误
        
        // 子转父：假设未发生编译错误，那么利用list.get(0)取到的全是Object对象，集合内实际存放的是String，虽然不报错ClassCastException，但泛型的出现解决手动强转，不能违背泛型的初衷
        ArrayList<String> list3 = new ArrayList<String>();
        list3.add(new String());
        list3.add(new String());
        // ArrayList<Object> list4 = list3; //编译错误
        
        // 泛型不具备继承性由上述代码体现，数据具备继承性请看如下代码
        list1.add(new Object());
        list1.add(new String(""));
        list1.add(new Integer(1));
    }
}
